home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / 4cmp22o.zip / FORTHLIB.SCR < prev    next >
Text File  |  1994-08-13  |  11KB  |  1 lines

  1. \ FORTH COMPILER  FORTH-83 LIBRARY               07:20 07/19/94                                                                 COPYRIGHT 1985 (C) BY THOMAS ALMY.  ALL RIGHTS RESERVED                                                                         Permission is granted to registered users of ForthCMP to        sell or distribute computer programs incorporating the compiled contents of this file.                                                                                                          SKIP AND SCAN ARE FROM LAXEN & PERRY FORTH 83.                  MS is a trademark of Microsoft Corporation.                                                                                     7/94 REQUIRE changed to REQUIRES to match documentation                                                                                                                                                                                                                                                                         \ INPUT WORDS                                    18:59 08/14/87 CR .( LOADING FORTHLIB ) CR HEX  FORTH                          U: #IN  PAD DUP 52 BL FILL  DUP 50 EXPECT  1- NUMBER?             0= IF 0 ( error ) ELSE DROP THEN ;                            UNDEF NUMBER? FIND DPL 0= #IF VARIABLE DPL #ELSE DROP #THEN     : NUMBER?  0. ROT DUP 1+ C@ ASCII - = IF 1+ -1 ELSE 0 THEN >R      -1 BEGIN DPL !  CONVERT  DUP C@ BL > WHILE                      DUP C@ ASCII . <> IF R> DROP DROP 0 EXIT THEN  0 REPEAT         DROP R> IF DNEGATE THEN  -1 ;  #THEN                         UNDEF CONVERT FIND DPL 0= #IF VARIABLE DPL #ELSE DROP #THEN     : CONVERT BEGIN 1+ DUP >R C@                                     ASCII 0 - DUP 0< IF 0 ELSE DUP 9 > IF 7 - THEN DUP BASE @ <     THEN WHILE SWAP BASE @ UM* DROP ROT BASE @ UM* D+               DPL @ 0< NOT IF 1 DPL +! THEN                                   R> REPEAT DROP R> ; #THEN  -->                                                                                                 ( INPUT WORDS                                  22:31 04/22/85 ) U: WORD >R #TIB @ >IN @ MIN DUP TIB + #TIB @ ROT -                OVER SWAP R@ SKIP OVER SWAP R> SCAN DROP 2DUP SWAP -            >R ROT - 1+ >IN @ + #TIB @ MIN >IN ! R@ DP @ C! DP @ 1+ R>       CMOVE  DP @ DUP COUNT + 20 C<- ;                             UNDEF SKIP   ASM L: done  CX PUSH  BX JMPI                      CODE SKIP BX POP AX POP  CX POP  done LOOP ~ JMPC                 DI POP  DX DS <SEG  DX ES >SEG  REPZ BYTE SCAS =0 ~ IF, CX INC  DI DEC THEN,  DI PUSH CX PUSH BX JMPI END-CODE #THEN          UNDEF SCAN  FIND done 0= #IF ASM L: done CX PUSH BX JMPI          #ELSE DROP #THEN                                              CODE SCAN BX POP AX POP CX POP done LOOP ~ JMPC  DI POP           DX DS <SEG DX ES >SEG  REPNZ BYTE SCAS =0 IF, CX INC DI DEC     THEN, DI PUSH CX PUSH BX JMPI END-CODE  #THEN  -->                                                                                                                                            \ DOUBLE NUMBER SUPPORT                          16:39 09/15/87 U: QUERY TIB 50 EXPECT SPAN @ #TIB ! >IN OFF ;                  U: DMIN 2OVER 2OVER D<  NOT IF 2SWAP THEN 2DROP ;               U: DMAX 2OVER 2OVER D< IF 2SWAP THEN 2DROP ;                    PRIMITIVE  U: D<                                                      ROT SWAP 2DUP <> IF < -ROT 2DROP ELSE 2DROP U< THEN ;     U: DU< ROT SWAP 2DUP <> IF 2SWAP THEN 2DROP U< ;                UNDEF 2SWAP  CODE 2SWAP SI POP AX POP BX POP CX POP DX POP        BX PUSH AX PUSH DX PUSH CX PUSH SI JMPI END-CODE #THEN        U: 2ROT  5 ROLL 5 ROLL ;                                        PRIMITIVE U: D=  ROT = >R = R> AND ;                            U: D.  0 D.R SPACE ;                                            U: D.R >R  TUCK DABS <# #S ROT SIGN #> R> OVER - SPACES TYPE ;  -->                                                                                                                                                                                             \ FORMATTED OUTPUT FUNCTIONS                     19:52 04/20/87 UNDEF D2/ CODE D2/ AX 1 SAR BX 1 RCR RET END-CODE #THEN         U: DABS DUP 0< IF DNEGATE THEN ;                                U: (.") CS: COUNT 2DUP + -ROT CS:TYPE ;                         PRIMITIVE U: HEX 10 BASE ! ; PRIMITIVE U: DECIMAL 0A BASE ! ;   U: U. 0 <# #S #> TYPE SPACE ;                                   U: U.R >R 0 <# #S #> R> OVER - SPACES TYPE ;                    U: . DUP ABS 0 <# #S ROT SIGN #> TYPE SPACE ;                   U: .R >R DUP ABS 0 <# #S ROT SIGN #> R> OVER - SPACES TYPE ;    U: SPACES DUP 0> IF 0 DO SPACE LOOP EXIT THEN DROP ;            FIND EMIT ?DUP #IF ?DEFINE CS:TYPE #IF                          SEPDSEG? #IF  : CS:TYPE 0 ?DO  CS: COUNT EMIT LOOP DROP ;       #ELSE CODE CS:TYPE END-CODE REQUIRES TYPE #THEN  #THEN          U: TYPE 0 ?DO COUNT EMIT LOOP DROP ; #THEN -->                                                                                                                                                  ( FORMATTED OUTPUT FUNCTION                    07:39 02/01/86 ) U: SPACE 20 EMIT ;                                              U: #S BEGIN # 2DUP OR 0= UNTIL ;                                U: #  BASE @ MU/MOD ROT 9 OVER < IF 7 + THEN 30 + HOLD ;        U: MU/MOD >R 0 R@ UM/MOD R> SWAP >R UM/MOD R> ;                 U: SIGN 0< IF 2D HOLD THEN ;                                    UNDEF HOLD FIND HLD #IF DROP #ELSE VARIABLE HLD #THEN             : HOLD -1 HLD +! HLD @ C! ; #THEN                             U: #> 2DROP HLD @ PAD OVER - ;                                  U: <# PAD HLD ! ;                                               UNDEF -TRAILING  CODE -TRAILING AX CX MOV BX AX MOV LOOP IF,      CX BX ADD BX DEC BEGIN, 20 # [BX] BYTE CMP  =0 IF, BX DEC       SWAP  LOOP ~ UNTIL,  THEN, AX BX MOV THEN, CX AX MOV RET        END-CODE #THEN                                                -->                                                                                                                             \ DEPTH ALLOT HERE PAD C, ,                      16:38 09/15/87 UNDEF DEPTH CODE DEPTH  S0 [] AX MOV  SP AX SUB  AX 1 SAR         RET END-CODE   #THEN                                          U: ALLOT  DP +! ;                                               U: HERE  DP @ ;                                                 U: PAD   DP @ 64 + ;                                            U: C, DP @ C! 1 DP +! ;                                         U: ,  DP @ !  2 DP +! ;                                         -->                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             \ CMOVE> FILL ROLL  DNEGATE SPAN EXPECT          13:52 01/03/92 UNDEF CMOVE> CODE CMOVE>  BX POP  CX POP DI POP SI POP            CX AX MOV AX DEC  AX SI ADD AX DI ADD  STD  AX DS <SEG          AX ES >SEG REPZ BYTE MOVS CLD BX JMPI END-CODE #THEN          UNDEF FILL CODE FILL  BX POP AX POP CX POP DI POP                 DX DS <SEG DX ES >SEG REPZ BYTE STOS BX JMPI END-CODE #THEN   UNDEF ROLL  CODE ROLL  BX POP  DI POP  AX SS <SEG AX ES >SEG      DI CX MOV CX INC  DI 1 SHL SP DI ADD DI SI MOV SI DEC SI DEC    SS: [DI] PUSH STD CLI REPZ MOVS STI CLD                         SP INC SP INC BX JMPI  END-CODE #THEN                         UNDEF DNEGATE  CODE DNEGATE  AX NOT BX NOT 1 # BX ADD              0 # AX ADC RET END-CODE #THEN                                UNDEF EXPECT  FIND SPAN #IF DROP #ELSE VARIABLE SPAN #THEN      : EXPECT ( ADDR LEN -- ) 80  !  80  0A BDOS DROP                     81 C@ SPAN !  82 SWAP SPAN @ CMOVE  CR ; #THEN  -->                                                                        ( DOS INTERFACE                                19:34 09/06/86 ) U: KEY  0 8 BDOS ;  U: ?TERMINAL 0 0B BDOS 0<> ;                U: CR   0D EMIT 0A EMIT ;                                       ?DEFINE EMIT ?DEFINE TYPE ?DEFINE CS:TYPE ?DEFINE CONSOLE       ?DEFINE PRINTER ?DEFINE MESSAGES OR OR OR OR OR #IF             VARIABLE of DSEG 1 of ! #THEN  UNDEF EMIT HERE 1 ALLOT          CODE EMIT AL OVER [] MOV 40 # AH MOV 1 # CX MOV DUP # DX MOV       of [] BX MOV 21 INT RET END-CODE DROP #THEN                  UNDEF CS:TYPE  CODE CS:TYPE SEPDSEG? #IF AX CX MOV BX DX MOV     of [] BX MOV  DS PUSHSEG  AX CS <SEG AX DS >SEG 40 # AH MOV      21 INT DS POPSEG RET #ELSE REQUIRES TYPE #THEN END-CODE #THEN UNDEF TYPE CODE TYPE AX CX MOV BX DX MOV of [] BX MOV             40 # AH MOV 21 INT RET END-CODE #THEN                         UNDEF CONSOLE CODE CONSOLE 1 # of [] MOV RET END-CODE #THEN     UNDEF PRINTER CODE PRINTER 4 # of [] MOV RET END-CODE #THEN    UNDEF MESSAGES CODE MESSAGES 2 # of [] MOV RET END-CODE #THEN -->\ DOS INTERFACE  CMOVEs 2OVER */MOD            2 16:22 12/15/91 UNDEF BDOS  CODE BDOS AL AH MOV BX DX MOV 21 INT                     AH AH XOR  RET  END-CODE #THEN                             UNDEF BYE  CODE BYE ' bye JMP END-CODE #THEN                    UNDEF RETURN CODE RETURN AX POP AX POP 4C # AH MOV 21 INT        END-CODE #THEN                                                 UNDEF CMOVE CODE CMOVE  BX POP  CX POP DI POP SI POP                AX DS <SEG AX ES >SEG REPZ BYTE MOVS BX JMPI                    END-CODE #THEN                                              UNDEF CMOVEL CODE CMOVEL BX POP CX POP DI POP ES POPSEG SI POP      DX DS <SEG DS POPSEG   REPZ BYTE MOVS                           DX DS >SEG BX JMPI END-CODE   #THEN                         PRIMITIVE U: 2OVER 3 PICK 3 PICK ;  U: */MOD >R M* R> M/MOD ;   -->                                                                                                                                                                                             ( {do}s                                        21:49 09/06/86 ) UNDEF (do)  CODE (do) 8000 # DX MOV  AX DX SUB  CX DX ADD           BP DEC BP DEC DX [BP] MOV  RET #THEN                        UNDEF (?do) CODE (?do) 8000 # DX MOV AX DX SUB  CX DX ADD           BP DEC BP DEC DX [BP] MOV  AX CX CMP  RET #THEN